package com.wksc.framework.impexp.dao;

import com.wksc.framework.impexp.constants.TaskStat;
import com.wksc.framework.impexp.task.Task;

import java.util.List;


/**
 * <p>
 * Title(文件名): ImpExpDao.java
 * </p>
 * <p>
 * Description(描述): TODO
 * </p>
 * <p>
 * Copyright(版权): Copyright (c) 2011
 * </p>
 * <p>
 * Company(公司): 成都四方信息技术有限公司
 * </p>
 * <p>
 * CreateTime(生成日期)：2011-10-21上午09:58:15
 * </p>
 * 
 * @author wanglei
 * @version impExp_C13
 */
public interface ImpExpDao {
	/**
	 * 把传入的模板保存到数据库中
	 * 
	 * @author QinJinxue
	 * @param task
	 *            导入导出任务
	 */
	public boolean addTask(Task task);

	/**
	 * @方法描述：修改日志记录的状态和状态信息
	 * @author QinJinxue
	 * @param fileName
	 *            文件类型
	 * @param state
	 *            状态码
	 * @param message
	 *            详细信息
	 */
	public void changeState(String fileName, int state, String message,
                            int postFix, int wrongFile, boolean updateCurrentState, boolean onlyUpdateSelf);

	/**
	 * 查找需要清理的记录
	 * 
	 * @author QinJinxue
	 * @param date
	 *            日期
	 * @return 在传入的日期前的所有记录
	 */
	public List<?> findClean(String date);

	/**
	 * 查找需要重新执行的任务
	 * 
	 * @author QinJinxue
	 * @return 所有的未执行完的任务
	 */
	public List<?> findReload();

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: findPausedTasks
	 * @Description: 查找需要重新加载的暂停任务
	 * @creator Owner
	 * @param matchClusteringMark
	 *            是否匹配主机标识
	 * @param checkRefreshDate
	 *            是否匹配心跳(刷新时间)
	 * @return List<?> 任务列表
	 */
	public List<?> findPausedTasks(boolean matchClusteringMark,
                                   boolean checkRefreshDate);

	/**
	 * 功能描述:根据文件名重新装载任务
	 * 
	 * @creator 王磊
	 * @param filename
	 * @return
	 */
	public List<?> findPausedJobByFilename(String filename);

	/**
	 * 删除一条记录
	 * 
	 * @author QinJinxue
	 * @param list
	 */
	public void delete(List<?> list);

	/**
	 * 清理数据库中存在异常的任务
	 * 
	 * @param filename
	 *            当前正在执行的文件名, 清理除此文件名之外的异常任务
	 * @param ipAddr
	 *            执行此项导入任务的操作用户的IP
	 * @auther wanglei
	 */
	public boolean checkFailedTask(String filename, String ipAddr);

	/**
	 * 方法描述：用于任务状态发生改变后修改GlobalControl中isDbSearch属性值
	 * 
	 * @creator wanglei
	 */
	public void setDbSearch();

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: getRunningList
	 * @Description : 得到运行中的任务列表 
	 * from ImportExport s where state = 2 and filename!=? 
	 * @creator Owner
	 * @return List<?> 运行中的任务列表
	 */
	List<?> getRunningList(String filenameExclude);

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: getQueueSize
	 * @Description: 返回某种类型的队列有多少个数据
	 * @creator Owner
	 * @param i
	 *            队列类型(int类型):<br/>
	 *            ImpExpDao.TYPE_PAUSELIST 暂停队列<br/>
	 *            ImpExpDao.TYPE_WAITINGQUEUE 等待队列<br/>
	 *            ImpExpDao.TYPE_TASKLIST 任务队列<br/>
	 * @param filename
	 *            如:黑名单管理
	 * @return int 返回类型
	 */
	public int getQueueSize(String filename, TaskStat... i); //hjj add 121123,集群环境下,判断导入文件冲突互斥问题

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: updateTask
	 * @Description: 更新当前任务内存状态
	 * @creator Owner
	 * @param task
	 *            通过任务,获取任务文件名调用boolean updateTaskCurrentState(String taskName,
	 *            TaskStat state)方法
	 * @param state
	 *            指定将指定文件名更新为state状态
	 * @return boolean false更新失败或0条记录 true更新到>0条的记录
	 * @see boolean updateTaskCurrentState(String taskName, TaskStat state)
	 */
	boolean updateTaskCurrentState(Task task, TaskStat state);

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: clusteringMarkExist
	 * @Description: 插入集群标识
	 * @creator Owner
	 * @param mark
	 *            集群标识
	 * @return boolean true插入成功 false已存在集群标识,插入失败
	 */
	boolean insertClusteringMark(String mark);

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: updateTask
	 * @Description: 更新当前任务内存状态
	 * @creator Owner
	 * @param taskName
	 *            通过文件名
	 * @param state
	 *            指定将指定文件名更新为state状态
	 * @return boolean false更新失败或0条记录 true更新到>0条的记录
	 */
	boolean updateTaskCurrentState(String taskName, TaskStat state);

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: resetTaskWaiting
	 * @Description: 将自己的2的任务首先设置为1,否则后面通过数据库判断执行中的任务的方式会有问题
	 * @creator Owner
	 * @return boolean 返回类型
	 */
	int resetTaskWaiting();

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: updateTaskCurrentState
	 * @Description: 更新当前任务current_state更新为job_state,并且同时更新主机标志
	 * @creator Owner
	 * @param taskName
	 *            通过文件名
	 * @return boolean false更新失败(异常)或0条记录 true更新到>0条的记录
	 */

	boolean syncCurrentState(String taskName);

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: updateRefreshDate
	 * @Description: 更新刷新时间
	 * @creator Owner
	 * @return int 返回类型
	 */

	int updateRefreshDate(String args);

	//	/**功能描述: checkeStyle
	//	 * 
	//	 * @Title: updateTaskJobState
	//	 * @Description: 更新td_import_exportjob_state
	//	 * @creator Owner
	//	 * @param taskName 文件名
	//	 * @param state 设置为state状态
	//	 * @param checkRefreshDate true检查DEAD_INTERVAL
	//	 * @see IEConstants.DEAD_INTERVAL
	//	 * @return boolean    true更新到记录 false更新无记录
	//	 */
	//	boolean updateTaskJobState(String taskName, TaskStat state,
	//			boolean checkRefreshDate);

//	/**
//	 * 功能描述: checkeStyle
//	 * 
//	 * @Title: updateTaskState
//	 * @Description: a.CLR_HOST_NAME被更新.根据条件更新a.current_state和a.job_state,
//	 * @creator Owner
//	 * @param taskName
//	 *            任务文件名
//	 * @param state
//	 *            更新为state状态
//	 * @param updateJobState
//	 *            true更细腻job_state false不更新
//	 * @param updateCurrentState
//	 *            true更新current_state false不更新
//	 * @param onlyUpdateSelf
//	 *            true只更新本机的任务 false更新所有任务
//	 * @return boolean true更新条数>0 false更新条数为0或抛出异常(-1)
//	 */
//	boolean updateTaskState(String taskName, TaskStat state,
//			boolean updateJobState, boolean updateCurrentState, boolean onlyUpdateSelf);

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: updateClusterMarkOfWaitingTasks
	 * @Description: update td_import_export a set a.clr_host_name=? where
	 *               a.current_state in(1,8) and a.current_state=a.job_state
	 * @creator Owner
	 * @return int 返回类型
	 */
	int updateClusterMarkOfWaitingTasks();

	
	/**功能描述: checkeStyle
	 * 
	 * @Title: refreshHeartBeat
	 * @Description: 刷新主机心跳,刷新CLUSTER_MARK的check_time
	 * @creator Owner  
	 * @return  true更新成功 false更新抛出异常,更新异常
	 */
	
	public boolean refreshHeartBeat();

}
